//package com.xinggq.common.handler;
//
//import java.io.IOException;
//import java.util.Map;
//import java.util.concurrent.ConcurrentHashMap;
//import lombok.NonNull;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.web.socket.CloseStatus;
//import org.springframework.web.socket.TextMessage;
//import org.springframework.web.socket.WebSocketHandler;
//import org.springframework.web.socket.WebSocketMessage;
//import org.springframework.web.socket.WebSocketSession;
//
///**
// * websocket处理器
// * @Description
// * @Author xinggq
// * @Date 2025/4/14
// */
//@Slf4j
//public class CustomWebSocketHandler implements WebSocketHandler {
//
//  private static final Map<String, WebSocketSession> SESSIONS = new ConcurrentHashMap<>();
//
//  @Override
//  public void afterConnectionEstablished(WebSocketSession session) {
//    String userName = session.getAttributes().get("userName").toString();
//    SESSIONS.put(userName, session);
//    log.info(String.format("成功建立连接~ userName: %s", userName));
//  }
//
//  @Override
//  public void handleMessage(WebSocketSession session, WebSocketMessage<?> message) {
//    String msg = message.getPayload().toString();
//    log.info("收到消息：{}", msg);
//  }
//
//  @Override
//  public void handleTransportError(WebSocketSession session, Throwable exception) throws Exception {
//    log.info("连接出错");
//    if (session.isOpen()) {
//      session.close();
//    }
//  }
//
//  @Override
//  public void afterConnectionClosed(@NonNull WebSocketSession session, CloseStatus closeStatus) {
//    log.info("连接已关闭,status:" + closeStatus);
//  }
//
//  @Override
//  public boolean supportsPartialMessages() {
//    return false;
//  }
//
//  /**
//   * 指定发消息
//   *
//   * @param message
//   */
//  public static void sendMessage(String userName, String message) {
//    WebSocketSession webSocketSession = SESSIONS.get(userName);
//    if (webSocketSession == null || !webSocketSession.isOpen()) {
//      return;
//    }
//    try {
//      webSocketSession.sendMessage(new TextMessage(message));
//    } catch (IOException e) {
//      e.printStackTrace();
//    }
//  }
//
//  /**
//   * 群发消息
//   *
//   * @param message
//   */
//  public static void fanoutMessage(String message) {
//    SESSIONS.keySet().forEach(us -> sendMessage(us, message));
//  }
//
//
//}
